home *** CD-ROM | disk | FTP | other *** search
/ Enter 2006 September / Enter 09 2006.iso / Internet / SpamExperts Home 1.1 / SpamExperts Home.exe / lib / spamexperts.modules / ImagePalette.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2006-07-14  |  4.1 KB  |  170 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. import array
  5. import Image
  6.  
  7. class ImagePalette:
  8.     '''Colour palette for palette mapped images'''
  9.     
  10.     def __init__(self, mode = 'RGB', palette = None):
  11.         self.mode = mode
  12.         self.rawmode = None
  13.         if not palette:
  14.             pass
  15.         self.palette = range(256) * len(self.mode)
  16.         self.colors = { }
  17.         self.dirty = None
  18.         if len(self.mode) * 256 != len(self.palette):
  19.             raise ValueError, 'wrong palette size'
  20.         
  21.  
  22.     
  23.     def getdata(self):
  24.         if self.rawmode:
  25.             return (self.rawmode, self.palette)
  26.         
  27.         return (self.mode + ';L', self.tostring())
  28.  
  29.     
  30.     def tostring(self):
  31.         if self.rawmode:
  32.             raise ValueError('palette contains raw palette data')
  33.         
  34.         if Image.isStringType(self.palette):
  35.             return self.palette
  36.         
  37.         return array.array('B', self.palette).tostring()
  38.  
  39.     
  40.     def getcolor(self, color):
  41.         if self.rawmode:
  42.             raise ValueError('palette contains raw palette data')
  43.         
  44.         if Image.isTupleType(color):
  45.             
  46.             try:
  47.                 return self.colors[color]
  48.             except KeyError:
  49.                 if Image.isStringType(self.palette):
  50.                     self.palette = map(int, self.palette)
  51.                 
  52.                 index = len(self.colors)
  53.                 if index >= 256:
  54.                     raise ValueError('cannot allocate more than 256 colors')
  55.                 
  56.                 self.colors[color] = index
  57.                 self.palette[index] = color[0]
  58.                 self.palette[index + 256] = color[1]
  59.                 self.palette[index + 512] = color[2]
  60.                 self.dirty = 1
  61.                 return index
  62.             except:
  63.                 None<EXCEPTION MATCH>KeyError
  64.             
  65.  
  66.         None<EXCEPTION MATCH>KeyError
  67.         raise ValueError('unknown color specifier: %r' % color)
  68.  
  69.     
  70.     def save(self, fp):
  71.         if self.rawmode:
  72.             raise ValueError('palette contains raw palette data')
  73.         
  74.         if type(fp) == type(''):
  75.             fp = open(fp, 'w')
  76.         
  77.         fp.write('# Palette\n')
  78.         fp.write('# Mode: %s\n' % self.mode)
  79.         for i in range(256):
  80.             fp.write('%d' % i)
  81.             for j in range(i, len(self.palette), 256):
  82.                 fp.write(' %d' % self.palette[j])
  83.             
  84.             fp.write('\n')
  85.         
  86.         fp.close()
  87.  
  88.  
  89.  
  90. def raw(rawmode, data):
  91.     palette = ImagePalette()
  92.     palette.rawmode = rawmode
  93.     palette.palette = data
  94.     palette.dirty = 1
  95.     return palette
  96.  
  97.  
  98. def new(mode, data):
  99.     return Image.core.new_palette(mode, data)
  100.  
  101.  
  102. def negative(mode = 'RGB'):
  103.     palette = range(256)
  104.     palette.reverse()
  105.     return ImagePalette(mode, palette * len(mode))
  106.  
  107.  
  108. def random(mode = 'RGB'):
  109.     randint = randint
  110.     import random
  111.     palette = map((lambda a, randint = randint: randint(0, 255)), [
  112.         0] * 256 * len(mode))
  113.     return ImagePalette(mode, palette)
  114.  
  115.  
  116. def wedge(mode = 'RGB'):
  117.     return ImagePalette(mode, range(256) * len(mode))
  118.  
  119.  
  120. def load(filename):
  121.     fp = open(filename, 'rb')
  122.     lut = None
  123.     if not lut:
  124.         
  125.         try:
  126.             import GimpPaletteFile
  127.             fp.seek(0)
  128.             p = GimpPaletteFile.GimpPaletteFile(fp)
  129.             lut = p.getpalette()
  130.         except (SyntaxError, ValueError):
  131.             pass
  132.         except:
  133.             None<EXCEPTION MATCH>(SyntaxError, ValueError)
  134.         
  135.  
  136.     None<EXCEPTION MATCH>(SyntaxError, ValueError)
  137.     if not lut:
  138.         
  139.         try:
  140.             import GimpGradientFile
  141.             fp.seek(0)
  142.             p = GimpGradientFile.GimpGradientFile(fp)
  143.             lut = p.getpalette()
  144.         except (SyntaxError, ValueError):
  145.             pass
  146.         except:
  147.             None<EXCEPTION MATCH>(SyntaxError, ValueError)
  148.         
  149.  
  150.     None<EXCEPTION MATCH>(SyntaxError, ValueError)
  151.     if not lut:
  152.         
  153.         try:
  154.             import PaletteFile
  155.             fp.seek(0)
  156.             p = PaletteFile.PaletteFile(fp)
  157.             lut = p.getpalette()
  158.         except (SyntaxError, ValueError):
  159.             pass
  160.         except:
  161.             None<EXCEPTION MATCH>(SyntaxError, ValueError)
  162.         
  163.  
  164.     None<EXCEPTION MATCH>(SyntaxError, ValueError)
  165.     if not lut:
  166.         raise IOError, 'cannot load palette'
  167.     
  168.     return lut
  169.  
  170.